import net from "net";

let ip = "";

const tcpServer = net.createServer((socket) => {
  // 该 socket 是与 client_server 沟通的桥梁
  // 接收客户端传过来的数据
  socket.on("data", (data) => {
    console.log(`接受来自客户端的数据:${data.toString()}`);
    // 创建连接设备的socket
    const deviceSocket = new net.Socket();
    //接受到的数据是 buffer 数据，将 buffer 数据转化成字符串
    let str = data.toString();

    // 如果传过来的数据是ip地址就将其存在变量 ip 中并终止后面代码的运行
    // 如果传过来的数据是指令将指令发送给设备
    if (/^(1)(9)(2)(.)/.test(str)) {
      // console.log(str);
      ip = str;
    }

    // 连接设备
    deviceSocket.connect(9993, ip, () => {
      // console.log(str);
      let regExp = /id/;
      if (regExp.test(str)) {
        deviceSocket.write(`goto:clip id:${JSON.parse(str).id}\n`);
        deviceSocket.write(`goto:timecode:${JSON.parse(str).timeCode}\n`);
      } else {
        console.log("测试Ip:" + ip);
        console.log("测试数据：" + str);
        deviceSocket.write(str);
      }
    });

    // 接受设备返回来的数据
    deviceSocket.on("data", (backendData) => {
      // console.log('不能返回数据');
      // console.log('这是设备返回的数据：'+backendData);
      //向客户端发送数据
      socket.write(backendData);
      deviceSocket.end();
    });

    deviceSocket.on("end", () =>
      console.log("Terminate data transmission to the server")
    );

    // deviceSocket.on('error',err=>deviceSocket.destroy(err))
    deviceSocket.on("error", () => console.log("connect error"));

    // 套接字传输错误 hadError 为 true
    deviceSocket.on("close", (hadError) => console.log(hadError));
  });
});

tcpServer.on("error", (err) => tcpServer.destroy(err));

tcpServer.listen(999, () => console.log("TCPServer run at 999 port"));
